home *** CD-ROM | disk | FTP | other *** search
/ ADA Programming Guide / ADA Programming Guide.iso / ada_pcdp / ada / defsbody.ada < prev    next >
Text File  |  1996-01-30  |  3KB  |  99 lines

  1. package body Tuple_Defs is
  2.  
  3.   function Int(I: Integer) return Tuple_Element is
  4.   begin
  5.     return (Ints, new Integer'(I));
  6.   end Int;
  7.  
  8.   function Char(C: Character) return Tuple_Element is
  9.   begin
  10.     return (Chars, new Character'(C));
  11.   end Char;
  12.  
  13.   function Bool(B: Boolean) return Tuple_Element is
  14.   begin
  15.     return (Bools, new Boolean'(B));
  16.   end Bool;
  17.  
  18.   function Str(S: String) return Tuple_Element is
  19.   begin
  20.     return (Strs, new String'(S));
  21.   end Str;
  22.  
  23.   function Vec(V: Vector) return Tuple_Element is
  24.   begin
  25.     return (Vecs, new Vector'(V));
  26.   end Vec;
  27.  
  28.   function Int(T: Tuples; Index: Integer) return Integer is
  29.   begin
  30.     return T(Index).I.all;
  31.   end Int;
  32.  
  33.   function Char(T: Tuples; Index: Integer) return Character is
  34.   begin
  35.     return T(Index).C.all;
  36.   end Char;
  37.  
  38.   function Bool(T: Tuples; Index: Integer) return Boolean is
  39.   begin
  40.     return T(Index).B.all;
  41.   end Bool;
  42.  
  43.   function Str(T: Tuples; Index: Integer) return String is
  44.   begin
  45.     return T(Index).S.all;
  46.   end Str;
  47.  
  48.   function Vec(T: Tuples; Index: Integer) return Vector is
  49.   begin
  50.     return T(Index).V.all;
  51.   end Vec;
  52.  
  53.   function Create_Tuple(T1, T2, T3, T4: Tuple_Element :=
  54.       (Null_Element)) return Tuples is
  55.   begin
  56.     return (T1, T2, T3, T4);
  57.   end Create_Tuple;
  58.  
  59.   function Element_Match(E1, E2: Tuple_Element) return Boolean is
  60.   begin
  61.     case E1.Tuple_Type is
  62.       when None => return True;
  63.       when Ints => 
  64.         return E1 = Formal_Int or else 
  65.                E2 = Formal_Int or else 
  66.                E1.I.all = E2.I.all;
  67.       when Chars =>
  68.         return E1 = Formal_Char or else 
  69.                E2 = Formal_Char or else 
  70.                E1.C.all = E2.C.all;
  71.       when Bools =>
  72.         return E1 = Formal_Bool or else 
  73.                E2 = Formal_Bool or else 
  74.                E1.B.all = E2.B.all;
  75.       when Strs =>
  76.         return E1 = Formal_Str or else
  77.                E2 = Formal_Str or else 
  78.                E1.S.all = E2.S.all;
  79.       when Vecs =>
  80.         return E1 = Formal_Vec or else 
  81.                E2 = Formal_Vec or else 
  82.                E1.V.all = E2.V.all;
  83.     end case;
  84.   end Element_Match;
  85.  
  86.   function Match(T1, T2: Tuples) return Boolean is
  87.   begin
  88.     for J in Tuples'Range loop
  89.       if T1(J).Tuple_Type /= T2(J).Tuple_Type 
  90.                 or else
  91.          not Element_Match(T1(J), T2(J)) then
  92.            return False;
  93.       end if;
  94.     end loop;
  95.     return True;
  96.   end Match;
  97.  
  98. end Tuple_Defs;
  99.